#ifndef GY_TAPEFINITE_H
#define GY_TAPEFINITE_H

#include "GY_SimpleGroup.h"
#include "GY_TransformGroup.h"
#include "Graphics/GY_Object.h"
#include "GY_ContainerTransform.h"
#include "GY_ControlLibrary_global.h"
#include "Graphics/BasicGraphics/GY_BasicsGraphicsObject.h"
#include <QGraphicsItemGroup>
#include <QGraphicsPathItem>
#include <QPen>
#include <QDebug>

class GY_CONTROLLIBRARY_EXPORT GY_TapeFinite : public GY_ContainerTransform
{
    Q_OBJECT
public:
    explicit Q_INVOKABLE GY_TapeFinite(const QString &guid,QGraphicsItem *parent = nullptr);
    ~GY_TapeFinite();

private:
    /**
     * @brief initializationPropertyInfo 初始化属性信息
     */
    void initializationPropertyInfo();
    //!继承基类重写
//    GY_Object * copyItem(const QString &guid = QString());
    /**
     * @brief updateIsVisible 是否隐藏
     * @param name 属性名称
     * @param value bool值
     * @return 是否更新成功
     */
    bool updateIsVisible(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 更新位置
     * @param name 属性名称
     * @param value 位置
     * @return 是否更新成功
     */
    bool updatePosition(const QString &name, const QVariant &value);
    /**
     * @brief updateValue
     * @param name
     * @param value
     * @return 是否更新成功
     */
    bool updateValue(const QString &name, const QVariant &value);
    /**
     * @brief updateValuePerRevolution
     * @param name
     * @param value
     * @return 是否更新成功
     */
    bool updateValuePerRevolution(const QString &name, const QVariant &value);
    /**
     * @brief updateDisplayAreaLeft 更新展示区域左边框位置
     * @param name
     * @param value
     * @return 是否更新成功
     */
    bool updateDisplayAreaLeft(const QString &name, const QVariant &value);
    /**
     * @brief updateDisplayAreaBottom 更新展示区域底部边框位置
     * @param name
     * @param value
     * @return 是否更新成功
     */
    bool updateDisplayAreaBottom(const QString &name, const QVariant &value);
    /**
     * @brief updateDisplayAreaRight 更新展示区域右边框位置
     * @param name
     * @param value
     * @return 是否更新成功
     */
    bool updateDisplayAreaRight(const QString &name, const QVariant &value);
    /**
     * @brief updateDisplayAreaTop 更新展示区域顶部边框位置
     * @param name
     * @param value
     * @return 是否更新成功
     */
    bool updateDisplayAreaTop(const QString &name, const QVariant &value);
    /**
     * @brief updateMotion 更新运动方向的位置
     * @param name
     * @param value
     * @return 是否更新成功
     */
    bool updateMotion(const QString &name, const QVariant &value);
    /**
     * @brief updatePoint 更新容器展示区域编辑点
     * @param name
     * @param value
     * @return 是否更新成功
     */
    bool updatePoint(const QString &name, const QVariant &value);
    /**
     * @brief setContainerEditPointF 设置编辑点
     */
    void setContainerEditPointF();
    /**
     * @brief updateDraw 更新绘制
     */
    void updateDraw();
private:
    /**
     * @brief m_pTransFormGroup 内容器
     */
    GY_TransformGroup* m_pTransFormGroup;
    /**
     * @brief m_ObjectItems 存放图元对象编号于vector
     */
    QVector<GY_Object *> m_ObjectItems;
    /**
     * @brief graphicsPathItem 绘制容器的矩形区域
     */
    QGraphicsPathItem *graphicsPathItem = new QGraphicsPathItem;
    /**
     * @brief m_Items 存入容器中的图元
     */
    GY_Object *m_Items;

private:

signals:


public:
    /**
     * @brief addItem 添加图元
     * @param pItem
     * @return
     */
    bool addItem(GY_Object *pItem);


    // GY_ContainerTransform interface
private:

};

#endif // GY_TAPEFINITE_H
